//
//  NSDate+TYZAdd.h
//  DrivieSchoolStudents
//
//  Created by TangBin on 2019/5/30.
//  Copyright © 2019 班文政. All rights reserved.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface NSDate (TYZAdd)

/// 得到当前时间的前面日期
/// @param type 1 天；2 月
/// @param num 数量
- (NSDate *)getPreviousDate:(NSInteger)type andNum:(NSInteger)num;

/**
 *  将时间转化为相应格式的时间戳
 *
 *  @param dateString 时间
 *  @param format     format(e.g:@"yyyy-MM-dd HH:mm:ss")
 *
 *  @return 时间戳
 */
+ (NSTimeInterval)dateWithTimeStamp:(NSString *)dateString format:(NSString *)format;

/**
 *  返回时间戳
 *
 *  @param dateString The string to parse.
 *  @param format     he string's date format.
 *  @param timeZone   The time zone, can be nil.
 *  @param locale     The locale, can be nil.
 *
 *  @return 时间戳
 */
+ (NSTimeInterval)dateWithTimeStamp:(NSString *)dateString format:(NSString *)format timeZone:(nullable NSTimeZone *)timeZone locale:(nullable NSLocale *)locale;

/**
 *  返回时间戳
 *
 *  @param format he string's date format.(e.g:@"yyyy-MM-dd HH:mm:ss")
 *
 *  @return 时间戳
 */
- (NSTimeInterval)stringWithTimeStamp:(NSString *)format;

/**
 *  时间戳
 *
 *  @param format   he string's date format.
 *  @param timeZone The time zone, can be nil.
 *  @param locale   The locale, can be nil.
 *
 *  @return 时间戳
 */
- (NSTimeInterval)stringWithTimeStamp:(NSString *)format timeZone:(nullable NSTimeZone *)timeZone locale:(nullable NSLocale *)locale;

/**
 *  得到时间字符串
 *
 *  @param interval 时间戳
 *  @param format   时间格式(e.g:@"yyyy-MM-dd HH:mm:ss")
 *
 *  @return return value description
 */
+ (nullable NSString *)timeStampWithString:(NSTimeInterval)interval format:(NSString *)format;

/**
 *  得到时间字符串
 *
 *  @param interval 时间戳
 *  @param format   format
 *  @param timeZone timeZone
 *  @param locale   locale
 *
 *  @return 返回时间时间字符串
 */
+ (nullable NSString *)timeStampWithString:(NSTimeInterval)interval format:(NSString *)format timeZone:(nullable NSTimeZone *)timeZone locale:(nullable NSLocale *)locale;


+ (nullable NSDate *)timeStampWithDate:(NSTimeInterval)interval format:(NSString *)format;

+ (nullable NSDate *)timeStampWithDate:(NSTimeInterval)interval format:(NSString *)format timeZone:(nullable NSTimeZone *)timeZone locale:(nullable NSLocale *)locale;

/// 两个日期想减，得到年数
/// @param startDate 开始时间
/// @param endDate 结束时间
/// @param format 格式
+ (NSInteger)yearsWithDateStringDiffer:(NSString *)startDate endDate:(NSString *)endDate format:(NSString *)format;

/**
 *  两个日期想减，得到天数
 *
 *  @param startDate 开始时间
 *  @param endDate   结束时间
 *  @param format    格式
 *
 *  @return 天数
 */
+ (NSInteger)daysWithDateStringDiffer:(NSString *)startDate endDate:(NSString *)endDate format:(NSString *)format;

/**
 *  两个时间相减，得到小时
 *
 *  @param startDate 开始日期
 *  @param endDate 结束日期
 *  @param format 格式
 *
 *  @return 返回小时
 */
+ (NSInteger)hoursWithDateStringDiffer:(NSString *)startDate endDate:(NSString *)endDate format:(NSString *)format;

/// 分
+ (NSInteger)minutesWithDateStringDiffer:(NSString *)startDate endDate:(NSString *)endDate format:(NSString *)format;

/// 秒
+ (NSInteger)secondsWithDateStringDiffer:(NSString *)startDate endDate:(NSString *)endDate format:(NSString *)format;

/**
 *  将一种格式的字符串日期转化为另一种日期的字符串
 *
 *  @param strDate   时间
 *  @param inFormat  输入日期格式
 *  @param outFormat 输出日期格式
 *
 *  @return 时间
 */
+ (nullable NSString *)stringWithDateInOut:(NSString *)strDate inFormat:(NSString *)inFormat outFormat:(NSString *)outFormat;

/// 获取当前的时间戳
+ (NSString *)stringWithCurrentTimeStamp;

/**
 比较两个时间的大小

 @param otherDate 比较的时间
 @param format 格式
 @return 0 时间相等；1 过期；-1 没有过期
 */
- (int)compareTime:(NSDate *)otherDate format:(NSString *)format;

/**
 获取当前的时间

 @param format 格式
 @return 按照格式返回日期
 */
- (NSDate *)currentDateFromat:(NSString *)format;

/**
 根据日期得到星期

 @param date 日期
 @param format 格式
 @param isShort YES 表示 一； NO表示 星期一
 @return return value description
 */
+ (NSString *)weekWithDate:(NSString *)date format:(NSString *)format isShort:(BOOL)isShort;


//NSDate *date = [NSDate date];
//NSRange daysInLastMonth = [[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date];
//// dayCountOfThisMonth就是date月份的天数
//NSInteger dayCountOfThisMonth = daysInLastMonth.length;

/// 获取当前月份的天数
- (NSInteger)currentMonthDays;

/// 获取某月的第一天
/// @param dateStr dateStr description
/// @param format format description
+ (NSString *)getMonthFirstDay:(NSString *)dateStr format:(NSString *)format;

/// 获取最后一天
/// @param dateStr dateStr description
/// @param format format description
+ (NSString *)getMonthLastDay:(NSString *)dateStr format:(NSString *)format;

@end

NS_ASSUME_NONNULL_END
